﻿import tv.zarate.Utils.*

class com.neshumah.Util.ObjectsList {
	private var lista:Array;
	private var currentKey:Number;
	
	
	function ObjectsList(){
		this.currentKey=0;
		this.lista=new Array();
	}
	
	public function add(itm:Object):Number{
		var i:Number;
		for(i=0; i<this.lista.length; i++){
			if(this.lista[i]==itm){
				return i;
			}
		}
		this.lista.push(itm);
		return this.lista.length-1;
	}
	public function remove(itm:Object , borrar:Boolean):Boolean{
		var i:Number;
		var total:Number=this.lista.length;
		for(i=0; i < total; i++){
			if(this.lista[i]==itm){
				if(borrar){
					delete this.lista[i];
				}
				Trace.trc(this.lista);
				this.lista.splice(i, 1);
				Trace.trc(this.lista);
				return true;
			}
		}
		return false;
	}
	
	/**
	 * Ordena los objetos en la lista deacuerdo a una propiedad dada.
	 * Para poder utilizar este metodo todos los elementos en la lista debe
	 * ser del mismo tipo
	 * 
	 * @usage   ObjectsList.sort(0,nombre_propiedad);
	 * @param   tipeSort Acepta cualquiera de las constantes definidas en Array:
	 * 
	 * Array.CASEINSENSITIVE or 1
	 * Array.DESCENDING or 2
	 * Array.UNIQUESORT or 4
	 * Array.RETURNINDEXEDARRAY or 8
	 * Array.NUMERIC or 16
	 * 
	 * @param	propiedad La propiedad que se ocupara para ordenar
	 * 
	 * @return  new ObjectsList() Ordenado
	 */
	
	public function sort(propiedad:String, tipeSort:Number){
		/*var i:Number;
		var total:Number=this.lista.length;
		trace(". "+total);
		
		var nuevaListaOrdenada:ObjectsList= new ObjectsList;
		var array_aux:Array=new Array();
		
		for(i=0; i<total; i++){
			if(this.lista[i][propiedad]){
				trace(this.lista[i][propiedad]);
				array_aux[i][0]=
				array_aux[i][1]=
			}
		}
		*/
		if(!tipeSort)
			tipeSort=Array.CASEINSENSITIVE;
		
		
		this.lista.sortOn(propiedad,tipeSort)
		
	}
	
	public function removeAll(){
		this.lista=new Array();
	}
	
	public function retrive(key:Number){
		this.currentKey=key;
		return this.lista[this.currentKey];
	}
	public function next():Object{
		this.currentKey++;
		return this.lista[this.currentKey-1];
	}
	
	public function get count(){
		return this.lista.length;
	}
	
	public function reset(){
		this.currentKey=0;
	}
	
}